(function(){
	var defaults = {
		width: 200,
		margin: '0',
		name: 'selectName',
		items: []
	};
	$.fn.extend({ 
		select: function(options) { 
			var $this = $(this);
			
			$.extend(true, defaults, options);

			$this.empty();
			
			if(!$this.hasClass("select-wrap")) {
				$this.addClass("select-wrap");
			}
			
			$this.css("margin", defaults.margin);
			
			var input = '<input class="select-value" style="width:' + defaults.width + 'px; ">';
			$this.append(input);
			var hidden = '<input type="hidden" class="select-hidden" name="' + defaults.name + '">';
			$this.append(hidden);
			
			
			if(defaults.items.length > 0) {
				var ul = [];
				ul.push('<ul class="select-item" style="width:' + (defaults.width + 4) + 'px; ">');
				for(var i = 0; i < defaults.items.length; i++) {
					ul.push('<li data-val="' + defaults.items[i].value + '">' + defaults.items[i].text + '</li>');
				}
				ul.push('</ul>');
				$this.append(ul.join(''));
			}
			
			$this.find(".select-item li").mousedown(function() {
				if($(this).hasClass("selected")) {
					$this.find(".select-value").val("");
					$this.find(".select-hidden").val("");
					$this.find(".select-item").hide();
					$(this).removeClass("selected");
				} else {
					$this.find(".select-value").val($(this).html());
					$this.find(".select-hidden").val($(this).data('val'));
					$this.find(".select-item").hide();
				}
			});
			$this.find(".select-value").focus(function() {
				$this.find(".select-item").show();
				$this.find(".select-item li").each(function() {
					if($this.find(".select-hidden").val() == $(this).data("val")) {
						if(!$(this).hasClass("selected")) {
							$(this).addClass("selected");
						}
						return true;
					}
				});
			});
			$this.find(".select-value").blur(function(e) {
				$this.find(".select-item").hide();
			});
			$this.find(".select-value").on("input", function(e){
				$this.find(".select-item li").removeClass("selected");
				
				var equalsFlag = false;
				var hiddenVal = '';
				
				var val = $(this).val();
				$this.find(".select-item li").each(function() {
					if(val == $(this).html()) {
						$(this).addClass("selected");
						equalsFlag = true;
						hiddenVal = $(this).data('val');
						return true;
					}
				});
				
				if(!equalsFlag) {
					$this.find(".select-hidden").val('');
				} else {
					$this.find(".select-hidden").val(hiddenVal);
				}
			});
        }
	});
})(jQuery);